Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


LXST/Codecs/Codec2.py 0.4.8 (525314cf) Text, 4.14 KB

T8b949e# Copyright 2024-2026, Mark Qvist

Tff7b72import T7ee787time
Tff7b72import T7ee787math
Tff7b72import T7ee787struct
Tff7b72import T7ee787pycodec2
Tff7b72import T7ee787numpy Tff7b72as T7ee787np
Tff7b72from T7ee787.T7ee787Codec Tff7b72import Te6edf3CodecTb4b4b4, Te6edf3CodecErrorTb4b4b4, Te6edf3resample_bytes

T8b949e# TODO: Remove debug
Tff7b72import T7ee787RNS

Tff7b72class T56d364Codec2Tb4b4b4(Te6edf3CodecTb4b4b4)Tb4b4b4:
Te6edf3CODEC2_700C Tff7b72= T79c0ff700
Te6edf3CODEC2_1200 Tff7b72= T79c0ff1200
Te6edf3CODEC2_1300 Tff7b72= T79c0ff1300
Te6edf3CODEC2_1400 Tff7b72= T79c0ff1400
Te6edf3CODEC2_1600 Tff7b72= T79c0ff1600
Te6edf3CODEC2_2400 Tff7b72= T79c0ff2400
Te6edf3CODEC2_3200 Tff7b72= T79c0ff3200

Te6edf3INPUT_RATE Tff7b72= T79c0ff8000
Te6edf3OUTPUT_RATE Tff7b72= T79c0ff8000
Te6edf3FRAME_QUANTA_MS Tff7b72= T79c0ff40
Te6edf3TYPE_MAP_FACTOR Tff7b72= Te6edf3npTff7b72.Td2a8ffiinfoTb4b4b4(Ta5d6ff"Ta5d6ffint16Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffmax

Te6edf3MODE_HEADERS Tff7b72= Tb4b4b4{Te6edf3CODEC2_700CTb4b4b4: T79c0ff0x00Tb4b4b4,
Te6edf3CODEC2_1200Tb4b4b4: T79c0ff0x01Tb4b4b4,
Te6edf3CODEC2_1300Tb4b4b4: T79c0ff0x02Tb4b4b4,
Te6edf3CODEC2_1400Tb4b4b4: T79c0ff0x03Tb4b4b4,
Te6edf3CODEC2_1600Tb4b4b4: T79c0ff0x04Tb4b4b4,
Te6edf3CODEC2_2400Tb4b4b4: T79c0ff0x05Tb4b4b4,
Te6edf3CODEC2_3200Tb4b4b4: T79c0ff0x06Tb4b4b4}

Te6edf3HEADER_MODES Tff7b72= Tb4b4b4{T79c0ff0x00Tb4b4b4: Te6edf3CODEC2_700CTb4b4b4,
T79c0ff0x01Tb4b4b4: Te6edf3CODEC2_1200Tb4b4b4,
T79c0ff0x02Tb4b4b4: Te6edf3CODEC2_1300Tb4b4b4,
T79c0ff0x03Tb4b4b4: Te6edf3CODEC2_1400Tb4b4b4,
T79c0ff0x04Tb4b4b4: Te6edf3CODEC2_1600Tb4b4b4,
T79c0ff0x05Tb4b4b4: Te6edf3CODEC2_2400Tb4b4b4,
T79c0ff0x06Tb4b4b4: Te6edf3CODEC2_3200Tb4b4b4}

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3modeTff7b72=Te6edf3CODEC2_2400Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffframe_quanta_ms Tff7b72= Tff7b72selfTff7b72.Td2a8ffFRAME_QUANTA_MS
Tff7b72selfTff7b72.Td2a8ffchannels Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ffbitdepth Tff7b72= T79c0ff16
Tff7b72selfTff7b72.Td2a8ffc2 Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffoutput_samplerate Tff7b72= Tff7b72selfTff7b72.Td2a8ffOUTPUT_RATE
Tff7b72selfTff7b72.Td2a8ffset_modeTb4b4b4(Te6edf3modeTb4b4b4)

Tff7b72def Td2a8ffset_modeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3modeTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmode Tff7b72= Te6edf3mode
Tff7b72selfTff7b72.Td2a8ffmode_header Tff7b72= Tff7b72selfTff7b72.Td2a8ffMODE_HEADERSTb4b4b4[Tff7b72selfTff7b72.Td2a8ffmodeTb4b4b4]Tff7b72.Td2a8ffto_bytesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffc2 Tff7b72= Te6edf3pycodec2Tff7b72.Td2a8ffCodec2Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffmodeTb4b4b4)

Tff7b72def Td2a8ffencodeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frameTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72raise Te6edf3CodecErrorTb4b4b4(Ta5d6ff"Ta5d6ffCannot encode frame with 0 channelsTa5d6ff"Tb4b4b4)
Tff7b72elif Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72> Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4:
Te6edf3frame Tff7b72= Te6edf3frameTb4b4b4[Tb4b4b4:Tb4b4b4, T79c0ff1Tb4b4b4]

Te6edf3input_samples Tff7b72= Te6edf3frameTff7b72*Tff7b72selfTff7b72.Td2a8ffTYPE_MAP_FACTOR
Te6edf3input_samples Tff7b72= Te6edf3input_samplesTff7b72.Td2a8ffastypeTb4b4b4(Te6edf3npTff7b72.Td2a8ffint16Tb4b4b4)

Tff7b72if Tff7b72selfTff7b72.Td2a8ffsourceTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsourceTff7b72.Td2a8ffsamplerate Tff7b72!= Tff7b72selfTff7b72.Td2a8ffINPUT_RATETb4b4b4:
Te6edf3frame_bytes Tff7b72= Te6edf3input_samplesTff7b72.Td2a8fftobytesTb4b4b4(Tb4b4b4)
Te6edf3resampled_bytes Tff7b72= Te6edf3resample_bytesTb4b4b4(Te6edf3frame_bytesTb4b4b4, Tff7b72selfTff7b72.Td2a8ffbitdepthTb4b4b4, Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4, Tff7b72selfTff7b72.Td2a8ffsourceTff7b72.Td2a8ffsamplerateTb4b4b4, Tff7b72selfTff7b72.Td2a8ffINPUT_RATETb4b4b4)
Te6edf3input_samples Tff7b72= Te6edf3npTff7b72.Td2a8fffrombufferTb4b4b4(Te6edf3resampled_bytesTb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8ffint16Tb4b4b4)
Te6edf3SPF Tff7b72= Tff7b72selfTff7b72.Td2a8ffc2Tff7b72.Td2a8ffsamples_per_frameTb4b4b4(Tb4b4b4)
Te6edf3N_FRAMES Tff7b72= Te6edf3mathTff7b72.Td2a8fffloorTb4b4b4(Tffa657lenTb4b4b4(Te6edf3input_samplesTb4b4b4)Tff7b72/Te6edf3SPFTb4b4b4)
Te6edf3input_frames Tff7b72= Te6edf3npTff7b72.Td2a8ffarrayTb4b4b4(Te6edf3input_samplesTb4b4b4[T79c0ff0Tb4b4b4:Te6edf3N_FRAMESTff7b72*Te6edf3SPFTb4b4b4]Tb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8ffint16Tb4b4b4)
Te6edf3encoded Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Tff7b72for Te6edf3pi Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3N_FRAMESTb4b4b4)Tb4b4b4:
Te6edf3pstart Tff7b72= Te6edf3piTff7b72*Te6edf3SPF
Te6edf3pend Tff7b72= Tb4b4b4(Te6edf3piTff7b72+T79c0ff1Tb4b4b4)Tff7b72*Te6edf3SPF
Te6edf3input_frame Tff7b72= Te6edf3input_framesTb4b4b4[Te6edf3pstartTb4b4b4:Te6edf3pendTb4b4b4]
Te6edf3encoded_frame Tff7b72= Tff7b72selfTff7b72.Td2a8ffc2Tff7b72.Td2a8ffencodeTb4b4b4(Te6edf3input_frameTb4b4b4)
Te6edf3encoded Tff7b72+Tff7b72= Te6edf3encoded_frame

T8b949e# TODO: Remove debug
T8b949e# print(f"SPF : {SPF}")
T8b949e# print(f"N_FRAMES : {N_FRAMES}")

Tff7b72return Tff7b72selfTff7b72.Td2a8ffmode_headerTff7b72+Te6edf3encoded

Tff7b72def Td2a8ffdecodeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frame_bytesTb4b4b4)Tb4b4b4:
Te6edf3frame_header Tff7b72= Te6edf3frame_bytesTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3frame_bytes Tff7b72= Te6edf3frame_bytesTb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4]
Tff7b72if Te6edf3frame_header Tff7b72in Tff7b72selfTff7b72.Td2a8ffHEADER_MODESTb4b4b4: Te6edf3frame_mode Tff7b72= Tff7b72selfTff7b72.Td2a8ffHEADER_MODESTb4b4b4[Te6edf3frame_headerTb4b4b4]
Tff7b72elseTb4b4b4: Te6edf3frame_mode Tff7b72= Tff7b72selfTff7b72.Td2a8ffmode
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmode Tff7b72!= Te6edf3frame_modeTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_modeTb4b4b4(Te6edf3frame_modeTb4b4b4)

Te6edf3SPF Tff7b72= Tff7b72selfTff7b72.Td2a8ffc2Tff7b72.Td2a8ffsamples_per_frameTb4b4b4(Tb4b4b4)
Te6edf3BPF Tff7b72= Tff7b72selfTff7b72.Td2a8ffc2Tff7b72.Td2a8ffbytes_per_frameTb4b4b4(Tb4b4b4)
Te6edf3STRUCT_FORMAT Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3SPFTffd700}Ta5d6ffhTa5d6ff"
Te6edf3N_FRAMES Tff7b72= Te6edf3mathTff7b72.Td2a8fffloorTb4b4b4(Tffa657lenTb4b4b4(Te6edf3frame_bytesTb4b4b4)Tff7b72/Te6edf3BPFTb4b4b4)

T8b949e# TODO: Remove debug
T8b949e# print(f"BPF : {BPF}")
T8b949e# print(f"N_FRAMES : {N_FRAMES}")

Te6edf3decoded Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Tff7b72for Te6edf3pi Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3N_FRAMESTb4b4b4)Tb4b4b4:
Te6edf3pstart Tff7b72= Te6edf3piTff7b72*Te6edf3BPF
Te6edf3pend Tff7b72= Tb4b4b4(Te6edf3piTff7b72+T79c0ff1Tb4b4b4)Tff7b72*Te6edf3BPF
Te6edf3encoded_frame Tff7b72= Te6edf3frame_bytesTb4b4b4[Te6edf3pstartTb4b4b4:Te6edf3pendTb4b4b4]
Te6edf3decoded_frame Tff7b72= Tff7b72selfTff7b72.Td2a8ffc2Tff7b72.Td2a8ffdecodeTb4b4b4(Te6edf3encoded_frameTb4b4b4)
Te6edf3decoded Tff7b72+Tff7b72= Te6edf3structTff7b72.Td2a8ffpackTb4b4b4(Te6edf3STRUCT_FORMATTb4b4b4, Tff7b72*Te6edf3decoded_frameTb4b4b4)

Tff7b72if Tff7b72selfTff7b72.Td2a8ffsinkTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsinkTff7b72.Td2a8ffsamplerate Tff7b72!= Tff7b72selfTff7b72.Td2a8ffOUTPUT_RATETb4b4b4:
Te6edf3decoded Tff7b72= Te6edf3resample_bytesTb4b4b4(Te6edf3decodedTb4b4b4, Tff7b72selfTff7b72.Td2a8ffbitdepthTb4b4b4, Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4, Tff7b72selfTff7b72.Td2a8ffOUTPUT_RATETb4b4b4, Tff7b72selfTff7b72.Td2a8ffsinkTff7b72.Td2a8ffsamplerateTb4b4b4)

Te6edf3decoded_samples Tff7b72= Te6edf3npTff7b72.Td2a8fffrombufferTb4b4b4(Te6edf3decodedTb4b4b4, Te6edf3dtypeTff7b72=Ta5d6ff"Ta5d6ffint16Ta5d6ff"Tb4b4b4)Tff7b72/Tff7b72selfTff7b72.Td2a8ffTYPE_MAP_FACTOR
Te6edf3frame_samples Tff7b72= Te6edf3npTff7b72.Td2a8ffzerosTb4b4b4(Tb4b4b4(Tffa657lenTb4b4b4(Te6edf3decoded_samplesTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4, Te6edf3dtypeTff7b72=Ta5d6ff"Ta5d6fffloat32Ta5d6ff"Tb4b4b4)
Te6edf3frame_samplesTb4b4b4[Tb4b4b4:Tb4b4b4, T79c0ff0Tb4b4b4] Tff7b72= Te6edf3decoded_samples

Tff7b72return Te6edf3frame_samples


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────